\hypertarget{page1_sec_and1}{}\section{Operacje rejestrowe oraz arytmetyczno-\/logiczne}\label{page1_sec_and1}
1. Pobranie rejestru flagowego z pamięci: 
\begin{DoxyCodeInclude}
        uint8_t FLAGS;

\end{DoxyCodeInclude}
 2. Identyfikacja numeru rejestru arg. 1: 
\begin{DoxyCodeInclude}
    uint8_t Rd=(getMEMC(getPC()) & 0x00F0) >> 4;                                                /
      / identyfikacja numeru rejestru arg. 1

\end{DoxyCodeInclude}
 3. Identyfikacja numeru rejestru arg. 2: 
\begin{DoxyCodeInclude}
    uint8_t Rr=(getMEMC(getPC()) & 0x000F);                                                             /
      / identyfikacja numeru rejestru arg. 2

\end{DoxyCodeInclude}
 4. Pobranie zawartosci rejestru arg 1: 
\begin{DoxyCodeInclude}
        uint8_t Rd_val = getRegister(Rd) % MAX_DATA_VAL;                                        /
      / pobranie zawartosci rejestru arg 1

\end{DoxyCodeInclude}
 5. Pobranie zawartosci rejestru arg 2: 
\begin{DoxyCodeInclude}
    uint8_t Rr_val = getRegister(Rr) % MAX_DATA_VAL;                                    /
      / pobranie zawartosci rejestru arg 2

\end{DoxyCodeInclude}
 6. Obliczenie wyniku: 
\begin{DoxyCodeInclude}
    uint8_t R = (Rd_val & Rr_val);                                                                              /
      / obliczenie wyniku

\end{DoxyCodeInclude}
\hypertarget{page1_sec_and2}{}\section{Operacje na flagach}\label{page1_sec_and2}
1. Wyzerowanie flagi V 
\begin{DoxyCodeInclude}
    ClearFlagRegisterBit(FLAG_V);                                                                               /
      / wyzerowanie flagi V

\end{DoxyCodeInclude}
 2. Ustawienie flagi N 
\begin{DoxyCodeInclude}
    if( ( (Rd & 0x80) >> 7) == 0 && ((R & 0x80) >> 7) == 1)                     /
      / jeĹ›li MSB Rd == 0 i MSB R == 1 to zmieniamy
        SetFlagRegisterBit(FLAG_N);                                                                             /
      / bo nastÄ…piĹ‚a zmiana MSB
        else
        ClearFlagRegisterBit(FLAG_N);

\end{DoxyCodeInclude}
 3. Ustawienie flagi Z 
\begin{DoxyCodeInclude}
        if( R == 0 ) SetFlagRegisterBit( FLAG_Z );                                                      /
      /ustwienie flagi Z
        else ClearFlagRegisterBit( FLAG_Z );

\end{DoxyCodeInclude}
 4. Ustawienie flagi S 
\begin{DoxyCodeInclude}
        if( (GetFlagRegisterStatus(FLAG_N) ^ GetFlagRegisterStatus(FLAG_V)) == 1 
      ){      //ustwienie flagi S
                SetFlagRegisterBit(FLAG_S);
        }
        else ClearFlagRegisterBit(FLAG_S);

\end{DoxyCodeInclude}
 5. Wypisanie zawartosci flag 
\begin{DoxyCodeInclude}
        PrintFlagRegisterStatus();                                                                                      /
      /Wypisanie zawartosci rejestru flag

\end{DoxyCodeInclude}
 6. Zapisanie wartosci rejestru do pamięci 
\begin{DoxyCodeInclude}
        setRegister(Rd,R);                                                                                                      /
      /Zapisanie wartosci rejestru do pamięci

\end{DoxyCodeInclude}
 7. Zwiększenie licznika rozkazów 
\begin{DoxyCodeInclude}
    incPC();                                                                                                                    /
      /Zwiększenie licznika rozkazów

\end{DoxyCodeInclude}
\hypertarget{page1_sec_and3}{}\section{Kod źródłowy funkcji}\label{page1_sec_and3}

\begin{DoxyCodeInclude}
/*
================================================================================
        Plik: f_and.c
--------------------------------------------------------------------------------
        Autorzy: Piotr Zdunek, Mateusz Słowikowski, Krzysztof Wiąckowski
        Projekt:Model mikrokontrolera AVR
        Kompilator: avr-gcc-4.3.5
        Doc: doxygen 1.7.4
--------------------------------------------------------------------------------
        Zawiera:
--------------------------------------------------------------------------------
        Komentarze:
================================================================================
*/

#include "types.h"
#include "mem_abs.h"

void F_AND(void){
#if DEBUG_MODE
        printf("Function AND.");
#endif
        //Pobranie rejestru flagowego z pamięci
        uint8_t FLAGS;
        FLAGS = GetFlagRegister();

    uint8_t Rd=(getMEMC(getPC()) & 0x00F0) >> 4;                                                /
      / identyfikacja numeru rejestru arg. 1
    uint8_t Rr=(getMEMC(getPC()) & 0x000F);                                                             /
      / identyfikacja numeru rejestru arg. 2
        uint8_t Rd_val = getRegister(Rd) % MAX_DATA_VAL;                                        /
      / pobranie zawartosci rejestru arg 1
    uint8_t Rr_val = getRegister(Rr) % MAX_DATA_VAL;                                    /
      / pobranie zawartosci rejestru arg 2
    uint8_t R = (Rd_val & Rr_val);                                                                              /
      / obliczenie wyniku
    //wypisanie zawartosci rejestrow -- czyste sprawdzenie czy wsjo ok
    printf("\n0x%04x: AND R%d = %d\n", getPC(), Rd,Rd_val);
    printf("R%d = %d, R = %d\n", getPC(),Rr,Rr_val,R);
        //----------USTAWIENIA REJESTRU FLAG-----------

    ClearFlagRegisterBit(FLAG_V);                                                                               /
      / wyzerowanie flagi V

    if( ( (Rd & 0x80) >> 7) == 0 && ((R & 0x80) >> 7) == 1)                     /
      / jeĹ›li MSB Rd == 0 i MSB R == 1 to zmieniamy
        SetFlagRegisterBit(FLAG_N);                                                                             /
      / bo nastÄ…piĹ‚a zmiana MSB
        else
        ClearFlagRegisterBit(FLAG_N);

        if( R == 0 ) SetFlagRegisterBit( FLAG_Z );                                                      /
      /ustwienie flagi Z
        else ClearFlagRegisterBit( FLAG_Z );

        if( (GetFlagRegisterStatus(FLAG_N) ^ GetFlagRegisterStatus(FLAG_V)) == 1 
      ){      //ustwienie flagi S
                SetFlagRegisterBit(FLAG_S);
        }
        else ClearFlagRegisterBit(FLAG_S);

        PrintFlagRegisterStatus();                                                                                      /
      /Wypisanie zawartosci rejestru flag
        setRegister(Rd,R);                                                                                                      /
      /Zapisanie wartosci rejestru do pamięci
    incPC();                                                                                                                    /
      /Zwiększenie licznika rozkazów
}
\end{DoxyCodeInclude}
 